package br.edu.ufcg.p1.barzin.model;

import java.util.ArrayList;
import java.util.List;

public class Resumo {

	private Item item;

	private List<Pedido> pedidosAtendidos = new ArrayList<Pedido>();
	private List<Pedido> pedidosPendentes = new ArrayList<Pedido>();

	public Resumo(Item item, List<Pedido> pedidosAtendidos,
			List<Pedido> pedidosPendentes) {
		this.item = item;
		if (pedidosAtendidos != null)
			this.pedidosAtendidos = pedidosAtendidos;
		if (pedidosPendentes != null)
			this.pedidosPendentes = pedidosPendentes;
	}

	public Item getItem() {
		return item;
	}

	public Integer getQuantidade() {
		int valor = 0;
		for (Pedido p : this.pedidosAtendidos) {
			valor += p.getQuantidade();
		}
		for (Pedido p : this.pedidosPendentes) {
			valor += p.getQuantidade();
		}
		return valor;
	}

	public List<Pedido> getPedidosAtendidos() {
		return pedidosAtendidos;
	}

	public void setItem(Item item) {
		this.item = item;
	}

	public List<Pedido> getPedidosPendentes() {
		return pedidosPendentes;
	}

	public double getValor() {
		double valor = 0;
		for (Pedido p : getPedidosAtendidos()) {
			valor += (p.getQuantidade() * p.getItem().getPreco());
		}
		for (Pedido p : getPedidosPendentes()) {
			valor += (p.getQuantidade() * p.getItem().getPreco());
		}
		return Math.round(valor * 100.0) / 100.0;
	}

	public boolean isPedidosRecebidos() {
		return pedidosPendentes.isEmpty();
	}

	public void addPedido(Pedido novoPedido) {
		if (novoPedido.isRecebido()) {
			this.pedidosAtendidos.add(novoPedido);
		} else {
			this.pedidosPendentes.add(novoPedido);
		}
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((item == null) ? 0 : item.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Resumo other = (Resumo) obj;
		if (item == null) {
			if (other.item != null)
				return false;
		} else if (!item.equals(other.item))
			return false;
		return true;
	}

	public void marcaComoRecebido(Pedido pedido) {
		pedido.setEstado("Atendido");
		this.pedidosPendentes.remove(pedido);
		this.pedidosAtendidos.add(pedido);
	}

	public void atualizaPedido(Pedido pedido) {
		if (this.pedidosPendentes.contains(pedido) && pedido.isRecebido()) {
			this.marcaComoRecebido(pedido);
		}
		if (this.pedidosPendentes.contains(pedido)) {
			Pedido p = this.pedidosPendentes.get(this.pedidosPendentes
					.indexOf(pedido));
			p.setPessoas(pedido.getPessoas());
			p.setQuantidade(pedido.getQuantidade());
		} else if (this.pedidosAtendidos.contains(pedido)) {
			Pedido p = this.pedidosAtendidos.get(this.pedidosAtendidos
					.indexOf(pedido));
			p.setPessoas(pedido.getPessoas());
			p.setQuantidade(pedido.getQuantidade());
		} else {
			// TODO fail
		}
	}

	@Override
	public String toString() {
		return "ITEM: " + item.toString();
	}

}
